package GUI;

import Controllers.ControllerSpelers;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import layout.TableLayout;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import Domein.*;

/**
 *
 * @author Tim
 */
public class Controller extends JFrame implements WindowListener {
    /**
     *
     */
    public ControllerSpelers cspelers;
    /**
     *
     */
    public Spel spel;
    /**
     *
     */
    public Spelronde ronde;
    /**
     *
     */
    public SpelerDeelname deelname;

    /**
     *
     */
    public Container c = getContentPane();
    JPanel mainPanel = new JPanel();
    TableLayout tl = new TableLayout();
    int screenWidth = 750, screenHeight = 600, locationLeft = 100, locationTop = 100;
    /**
     *
     */
    public Speler spelerIngelogd;
    /**
     *
     */
    public int spelerNr;

    /**
     *
     */
    public Menu menu = new Menu(this);

    Login login = new Login(this);
    Registreren registreren = new Registreren(this);
    ServerClient serverClient = new ServerClient(this);
    /**
     *
     */
    public Tafel tafel;
    SpelerWijzigen spelerWijzigen = new SpelerWijzigen(this);
    WachtwoordWijzigen wachtwoordWijzigen = new WachtwoordWijzigen(this);
    GeldStorten geldStorten = new GeldStorten(this);
    /**
     *
     */
    public RatioOverzicht ratioOverzicht = new RatioOverzicht(this);

    /**
     *
     * @param snr
     * @param cs
     * @param s
     */
    public Controller(int snr,ControllerSpelers cs,Spel s) {
        cspelers = cs;
        spel = s;
        ronde = spel.ronden.get(s.ronden.size()-1);
        spelerNr = snr;
        tafel = new Tafel(this);

        // Centreren van de applicatie op het scherm
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        locationLeft = (dim.width - screenWidth) / 2;
        locationTop = (dim.height - screenHeight) / 2;

        // Standaard dingen tonen bij het opstarten van de applicatie.
        menu.setMenu("inlog");
        setGUI("inloggen");

        // favicon
        Image tjgLogo = Toolkit.getDefaultToolkit().getImage("src/GUI/tjglogo.png");
        setIconImage(tjgLogo);

        // Frame instellingen
        changeTitle();
        setVisible(true);
        setPreferredSize(new Dimension(screenWidth, screenHeight));
        setLocation(locationLeft, locationTop);
        setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        addWindowListener(this);
        setBackground(Color.WHITE);
        setResizable(false);
        c.setLayout(tl);
        pack();
    }

    /**
     *
     * @param title
     */
    public void changeTitle(String title) {
        setTitle(title + " - The Jack Game");
    }

    /**
     *
     */
    public void changeTitle() {
        setTitle("The Jack Game");
    }

    /**
     *
     */
    public void closeProgram() {
        System.out.println(cspelers.aantalSchermen);
        int confirm = JOptionPane.showConfirmDialog(this, "Weet u zeker dat u het programma wilt verlaten?", "Afsluiten?",JOptionPane.OK_CANCEL_OPTION);
        if(confirm == 0) {
            JOptionPane.showMessageDialog(this, "Bedankt voor het spelen en tot ziens!");
            Database db = new Database();
            if (cspelers.spelers != null)
                for (Controller sp : cspelers.spelers) {
                    if (sp.deelname != null && sp.deelname.speler != null) {
                        try {
                            db.spelerOpslaan(sp.deelname.speler);
                        } catch (Exception ex) {}

                    }
                }
            System.exit(0);
        }
    }

    /**
     *
     * @param gui
     */
    public void setGUI(String gui) {
        c.removeAll();
        if(gui.toLowerCase().equals("inloggen")) {
            System.out.print("GUI inloggen laden... ");
            login.createGUI();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("registreren")) {
            System.out.print("GUI registreren laden... ");
            registreren.createGUI();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("spelerwijzigen")) {
            System.out.print("GUI spelerWijzigen laden... ");
            spelerWijzigen.createGUI();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("wachtwoordwijzigen")) {
            System.out.print("GUI wachtwoordWijzigen laden... ");
            wachtwoordWijzigen.createGUI();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("serverclient")) {
            System.out.print("GUI ServerClient laden... ");
            serverClient.createGUI();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("tafel")) {
            System.out.print("GUI Tafel laden... ");
            cspelers.server.setSpelers(cspelers.spelers);
            cspelers.server.maakTafels();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("huidigetafel")) {
            System.out.print("GUI Tafel laden... ");
            cspelers.server.refreshTafels();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("ratiooverzicht")) {
            System.out.print("GUI ratioOverzicht laden... ");
            ratioOverzicht.createGUI();
            System.out.println("Ok!");
        }
        if(gui.toLowerCase().equals("geldstorten")) {
            System.out.print("GUI geldStorten laden... ");
            geldStorten.createGUI();
            System.out.println("Ok!");
        }
        validate();
        repaint();
    }

    public void windowOpened(WindowEvent e) {
        //System.out.println("windowOpened");
    }

    public void windowClosing(WindowEvent e) {
        closeProgram();
    }

    public void windowClosed(WindowEvent e) {
        //System.out.println("windowClosed");
    }

    public void windowIconified(WindowEvent e) {
        //System.out.println("windowIconified");
    }

    public void windowDeiconified(WindowEvent e) {
        //System.out.println("windowDeiconfied");
    }

    public void windowActivated(WindowEvent e) {
        //System.out.println("windowActivated");
    }

    public void windowDeactivated(WindowEvent e) {
        //System.out.println("windowDeactivated");
    }

}
